<?php
ini_set('max_execution_time', 30000);

/**
 * @package   auto_occasion
 * @subpackage 
 * @author    CMS
 * @copyright 2011
 * @license    All rights reserved
 **/

class entrepriseSrv {

    /**
     * Fonction permettant d'avoir la liste des entreprises par type
     * @return object $liste
     *
     */
    public function listeByType ($iType) {

        // instanciation de la factory
        $maFactory = jDao::get("commun~ao_entreprise");
        $records   = $maFactory->getListByType($iType);

        return $records->fetchAll();
    }

    /**
     * Fonction pour ajouter un entreprise
     * @param object $oEntreprise
    */
    public function ajouter($oEntreprise){

        $dao = jDao::get('commun~ao_entreprise');
        $entreprise= jDao::createRecord("commun~ao_entreprise");

        $entreprise->entreprise_name           = $oEntreprise->entreprise_name;
        $entreprise->entreprise_adresse        = $oEntreprise->entreprise_adresse;
        $entreprise->entreprise_cp             = $oEntreprise->entreprise_cp; 
        $entreprise->entreprise_ville          = $oEntreprise->entreprise_ville;
        $entreprise->entreprise_tel            = $oEntreprise->entreprise_tel; 
        $entreprise->entreprise_tel2           = $oEntreprise->entreprise_tel2;
        $entreprise->entreprise_fax            = $oEntreprise->entreprise_fax;
        $entreprise->entreprise_email          = $oEntreprise->entreprise_email;
        $entreprise->entreprise_site           = $oEntreprise->entreprise_site;
        $entreprise->entreprise_departement    = $oEntreprise->entreprise_departement;
        $entreprise->entreprise_description    = $oEntreprise->entreprise_description;
        $entreprise->entreprise_type_id        = $oEntreprise->entreprise_type_id;
        $entreprise->entreprise_logo           = $oEntreprise->entreprise_logo;
        $entreprise->entreprise_ordre          = $oEntreprise->ordre ;
        $entreprise->entreprise_ouverture      = $oEntreprise->entreprise_ouverture ;
        $entreprise->entreprise_piece          = $oEntreprise->entreprise_piece ;


       
        if ($dao->insert($entreprise)) {
            //self::ajoutMiseEnAvant($entreprise->entreprise_id, $oEntreprise->miseenavant);
            return $entreprise ;
        } else {
            return false ;
        }
    }

    /**
     * Fonction pour modifier un témoignage
     * @param object $oTemoignage
     */
      public function modifier($oEntreprise){

        $dao = jDao::get('commun~ao_entreprise');
        $entreprise= $dao->get($oEntreprise->entreprise_id);

        $entreprise->entreprise_name           = $oEntreprise->entreprise_name;
        $entreprise->entreprise_adresse        = $oEntreprise->entreprise_adresse;
        $entreprise->entreprise_cp             = $oEntreprise->entreprise_cp; 
        $entreprise->entreprise_ville          = $oEntreprise->entreprise_ville;
        $entreprise->entreprise_tel            = $oEntreprise->entreprise_tel; 
        $entreprise->entreprise_tel2           = $oEntreprise->entreprise_tel2;
        $entreprise->entreprise_fax            = $oEntreprise->entreprise_fax;
        $entreprise->entreprise_email          = $oEntreprise->entreprise_email;
        $entreprise->entreprise_site           = $oEntreprise->entreprise_site;
        $entreprise->entreprise_departement    = $oEntreprise->entreprise_departement;
        $entreprise->entreprise_description    = $oEntreprise->entreprise_description;
        $entreprise->entreprise_type_id        = $oEntreprise->entreprise_type_id;
        $entreprise->entreprise_logo           = ($oEntreprise->entreprise_logo)?$oEntreprise->entreprise_logo : $entreprise->entreprise_logo;
        $entreprise->entreprise_ordre          = $oEntreprise->ordre ;
        $entreprise->entreprise_ouverture      = $oEntreprise->entreprise_ouverture ;
        $entreprise->entreprise_piece          = $oEntreprise->entreprise_piece ;

        if ($dao->update($entreprise)) {
            //self::updateMiseEnAvant($entreprise->entreprise_id);
            //self::ajoutMiseEnAvant($entreprise->entreprise_id, $oEntreprise->miseenavant);
            return $entreprise ;
        } else {
            return false ;
        }

     }
 

     /**
     * Fonction permettant d'avoir une entreprise à partir de son id
     * @param object $_id
     */
    public function chargeParId($_id){

        $dao = jDao::get('commun~ao_entreprise');

        return  $dao->get($_id);
    }

    /**
     * Fonction permettant d'initialiser un objet entreprise
     * @return object
     *
     */
    public function init () {

        return jDao::createRecord("commun~ao_entreprise");
    }


    /**
     * Fonction appelée  en cas de modification sur la mise en avant
     * Une somme est réalisée en fonction des checkbox sélectionnée qui va déterminer la valeur de l'ordre
     *
     */
    function updateOrdre($ordre){
        $somme = 0;

        foreach ($ordre as $itemOrdre){
              if($itemOrdre == "prefet"){
                 $somme += 1;
              }
               if($itemOrdre == "villesecond"){
                 $somme += 2;
              }
               if($itemOrdre == "departement"){
                 $somme += 4;
              }
               if($itemOrdre == "region"){
                 $somme +=8;
              }
         }
        return $somme;
     }

    /**
     * Fonction appelée  en cas de modification sur la mise en avant
     */
    public static function ajoutMiseEnAvant($id, $enAvant){

        $query = " INSERT INTO ao_entreprise_misen_avant (entreprise_id, mis_en_avant) VALUES ";
        foreach ($enAvant as $k=>$item) {
                $sep = (!$k)? "" : ",";
                $query .= $sep . "($id, '".$item."')";
            }
        $cnx    = jDb::getConnection();
        return $cnx->query($query);
    }


    /**
     * Fonction pour update mis en avnt
     * @param int $id
     */
    public static function updateMiseEnAvant($id){
        
        $cnx     = jDb::getConnection();
        $sql     = " DELETE FROM ao_entreprise_misen_avant WHERE  entreprise_id =".$id;
        $cnx->exec($sql);
    }

    /**
     * Fonction pour trouver mis en avant correspondant à un id entreprise
     * @param object $_formule
     */
    public function getEnterpriseEnAvant($id){

        $cnx    = jDb::getConnection();
        $sql    = "SELECT mis_en_avant FROM ao_entreprise_misen_avant WHERE  entreprise_id =".$id;
        $rs     = $cnx->query($sql);
        $res = array();
        while ($row = $rs->fetch()){
            $res[] = $row->mis_en_avant;
        }

        return $res;
    }

    /**
     * Récupération de la liste des région/departement 
     * correspondant à un type d'entreprise
     * @param int $type
     */
    
     public function getRegionByType($type){

        $cnx  = jDb::getConnection();
        $sql  = " SELECT AD.region FROM ao_departement AD";
        $sql .= " INNER JOIN ao_entreprise AE ON AE.entreprise_departement = AD.departement_id";
        $sql .= " WHERE AE.entreprise_type_id = ".$type;
        $sql .= " GROUP BY AD.region ORDER BY AD.region ";

        $rs     = $cnx->query($sql);
        $res = array();
        while ($row = $rs->fetch()){
            $res[] = self::getNumRegion($row->region);
        }
        return $res;
    }

    /**
     * Liste des département par region
     */
    public function getNumRegion($region){

        $cnx  = jDb::getConnection();
        $sql  = " SELECT departement_num FROM ao_departement ";
        $sql .= " where region = '".  addslashes($region)."'";
        $sql .= " ORDER BY region LIMIT 1";
        $rs   = $cnx->query($sql);

        return $rs->fetch()->departement_num;

    }


    /**
     * Liste les entreprises par département
     * @param int $departementId
     */
    public function getByDepartement($departementId, $type){

        $maFactory  = jDao::get('commun~ao_entreprise');
        $conditions = jDao::createConditions();

        $conditions->addCondition('entreprise_departement','IN',$departementId);
        $conditions->addCondition('entreprise_type_id','=',$type);

        return $maFactory->findBy($conditions)->fetchAll();
    }

    /**
     * Liste des régions
     * @return object
     */
    public function regionList(){

        $maFactory  = jDao::get('commun~ao_departement');
        $conditions = jDao::createConditions();
        $conditions->addItemOrder('region','asc');
        $conditions->addItemGroup('region');

        return $maFactory->findBy($conditions)->fetchAll();
    }

    /**
     * Liste les entreprises déjà en avant par département/region et par type d'entreprise
     * @param int $departementId
     */
    public function getByDepartementEnAvant($departement, $type, $region){

        $maFactory  = jDao::get('commun~ao_misenavant_dep_entreprise');
        $conditions = jDao::createConditions();
        
        if ($departement) 
            $conditions->addCondition('departement','=',$departement);
        else
            $conditions->addCondition('departement','=',0);
        if ($type) 
            $conditions->addCondition('type','=',$type);   
        if ($region) 
            $conditions->addCondition('region','=',$region);   

        return $maFactory->findBy($conditions)->fetchAll();
    }

    /**
     * Fonction pour vider la table ao_misenavant_dep_entreprise par departement
     * @param int $departement
     */
    public static function delByDept($departement, $type, $region, $entreprise){
        
        $cnx  = jDb::getConnection();
        $sql  = " DELETE FROM ao_misenavant_dep_entreprise ";
        $sql .= " WHERE 1";

        if ($departement) 
            $sql .= " AND departement =".$departement;
        if ($type) 
            $sql .= " AND type =" . $type;
        if ($region) 
            $sql .= " AND region ='" . $region."'";
        if ($entreprise) 
            $sql .= " AND region =" . $entreprise;

        return $cnx->exec($sql);
    }


    /**
     * Fonction pour vider la table ao_misenavant_dep_entreprise par departement
     * @param int $departement
     * @param array $entreprise
     */
    public static function addEnAvantByDept($departement, $entreprise, $type, $region){
        
        $query = " INSERT INTO ao_misenavant_dep_entreprise (departement, entreprise, type, region) VALUES ";
        foreach ($entreprise as $k=>$item) {
            $sep = (!$k)? "" : ",";
            $query .= $sep . "($departement, $item, $type, '".$region."')";
        }
        $cnx = jDb::getConnection();

        return $cnx->exec($query);
    }

    /**
     * Récupère les régions correspondant aux départements
     * @param string $departement
     */
    public static function getRegionByDepartement($departement){
        
        $query   = " SELECT departement_id, region, departement_nom FROM ao_departement WHERE departement_id IN (".$departement.") GROUP BY region ORDER BY region ASC ";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($query);

        return $tResult;
    }
    /**
     * Récupère les déparement par régions
     * @param string $region
     * @param string $departement
     */
    public static function getDepartementParRegion($region, $departement){
        
        $query   = " SELECT departement_id, region, departement_nom FROM ao_departement WHERE  region = '".$region."' AND departement_id IN (".$departement.") ORDER BY departement_nom ASC ";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($query);

        return $tResult;
    }

    /**
     * Récupère les entreprises par région
     * @param string $region
     * @param string $departement
     */
    public static function getEntrepriseParRegion($region, $departement, $type){
        
        $query  = " SELECT entreprise_id, entreprise_name FROM ao_entreprise E";
        $query .= " INNER JOIN ao_departement D ON D.departement_id = E.entreprise_departement";
        $query .= " WHERE  D.region = '".$region."' AND D.departement_id IN (".$departement.")  AND E.entreprise_type_id = " . $type;

        $jdb    = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($query);

        return $tResult;
    }

    /**
     * Récupère les  départements
     * @param string $departement
     * @param array $entreprise
     */
    public static function getDepartement($departement){
        
        $query   = " SELECT departement_id, region, departement_nom, departement_num FROM ao_departement WHERE departement_id IN (".$departement.") ORDER BY departement_nom ASC ";
        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($query);

        return $tResult;
    }


    /**
     * Récuperation des ids des departements
     * @param array $entreprise
     */
    public static function getDepartementId($entreprise){
        
        $departementId = array();
        if (sizeof($entreprise)) {
            foreach($entreprise as $item) {
                if(!in_array($item->entreprise_departement, $departementId))$departementId[] = $item->entreprise_departement;
            }
        }

        return $departementId;
    }

    /**
     * Récuperation des entreprises par type et par région
     * @param array $entreprise
     */
    public static function getAllEntrepriseByType($type,$dept,$_iDebutListe, $_iParPage=20 ){
        
        $query  = " SELECT  SQL_CALC_FOUND_ROWS entreprise_id, entreprise_name, entreprise_ouverture, entreprise_piece, entreprise_adresse, entreprise_ville, entreprise_cp, entreprise_tel, "; 
        $query .= " entreprise_fax, entreprise_logo,entreprise_description  FROM ao_entreprise E";
        $query .= " INNER JOIN ao_type_entreprise  TE ON TE.type_id = E.entreprise_type_id";
        $query .= " WHERE  TE.type_id = " . $type;
        $query .= " AND  E.entreprise_departement IN (" .$dept.")";
        $query .= " LIMIT  ".$_iDebutListe.",".$_iParPage."";
        $jdb = jDb::getDbWidget();
        $tResult['entreprise']  =  $jdb->fetchAll($query);
        $count =  $jdb->fetchFirst('SELECT FOUND_ROWS() as nbEnreg');
        $tResult['nbRecords'] = $count->nbEnreg;

        return $tResult;
    }



    /**
    * Fonction permettant de récupérer les entreprises avec leur départements
    */
    public function typeEntrepriseParIdType($idType){

        $dao = jDao::get('commun~ao_type_entreprise');

        return  $dao->get($idType);
    }

    /**
     * Fonction permettant de récupérer les entreprises avec leur départements
    */
    public static function  listeEntrepriseDepartements($type = 0) {
            
             $sql  = " SELECT entreprise_id, entreprise_name,departement_num,departement_nom  ";
             $sql .= " FROM ao_entreprise";
             $sql .= " LEFT JOIN ao_departement on departement_id = entreprise_departement";
             if ($type)
                $sql .= " WHERE entreprise_type_id = ". $type;
             $sql .= " GROUP BY  entreprise_id  ORDER BY departement_num asc, entreprise_name asc";

             $cnx = jDb::getConnection();
             $rs  = $cnx->query($sql);

             return $rs->fetchAll();
    }
    /**
     * Fonction permettant de récupérer la région à partir de departement Num
    */
    public static function  getRegion($depNum) {
            
             $sql  = " SELECT region  ";
             $sql .= " FROM ao_departement";
             if($depNum)
                $sql .= " WHERE departement_num = ".$depNum;

             $cnx = jDb::getConnection();
             $rs   = $cnx->query($sql);
             return $rs->fetch()->region;


    }

       /**
     * Fonction permettant de récupérer la région à partir de departement Num
    */
    public static function  getDepartementNom($depNum) {
            
             $sql  = " SELECT departement_nom  ";
             $sql .= " FROM ao_departement";
             $sql .= " WHERE departement_num = ".$depNum;

             $cnx = jDb::getConnection();
             $rs   = $cnx->query($sql);
             return $rs->fetch()->departement_nom;


    }
     /**
     * Liste des département id par region
     */
    public function getIdRegion($region){

        $cnx  = jDb::getConnection();
        $sql  = " SELECT departement_id FROM ao_departement ";
        $sql .= " where region = '".addslashes($region)."'";

        $rs     = $cnx->query($sql);
        $res = array();
        while ($row = $rs->fetch()){
            $res[] = $row->departement_id;
        }

        return $res;

    }

        /**
     * Récuperation des entreprises par type et par région
     * @param array $entreprise
     */
    public static function getAllEntrepriseByDept($type,$dept,$_iDebutListe, $_iParPage=20 ){
        
        $query  = " SELECT  SQL_CALC_FOUND_ROWS entreprise_id, entreprise_ouverture, entreprise_piece, entreprise_name, entreprise_adresse, entreprise_ville, entreprise_cp, entreprise_tel, "; 
        $query .= " entreprise_fax, entreprise_logo,entreprise_description  FROM ao_entreprise E";
        $query .= " INNER JOIN ao_departement on departement_id = entreprise_departement";
        $query .= " WHERE  entreprise_type_id =" .$type;
        $query .= " AND entreprise_departement=".$dept;
        $query .= " LIMIT  ".$_iDebutListe.",".$_iParPage."";
        $jdb = jDb::getDbWidget();
        $tResult['entreprise']  =  $jdb->fetchAll($query);
        $count =  $jdb->fetchFirst('SELECT FOUND_ROWS() as nbEnreg');
        $tResult['nbRecords'] = $count->nbEnreg;

        return $tResult;
    }

     /**
     * Récuperation des entreprises par type ,département et ville 
     * @param array $entreprise
     */
    public static function getAllEntrepriseByVille($type,$dept,$ville,$_iDebutListe, $_iParPage=20){
        
        $query  = " SELECT  SQL_CALC_FOUND_ROWS entreprise_id, entreprise_ouverture, entreprise_piece, entreprise_name, entreprise_adresse, entreprise_ville, entreprise_cp, entreprise_tel, "; 
        $query .= " entreprise_fax, entreprise_logo,entreprise_description  FROM ao_entreprise E";
        $query .= " INNER JOIN ao_departement on departement_id = entreprise_departement";
        $query .= " WHERE  entreprise_type_id =" .$type;
        $query .= " AND entreprise_departement=".$dept;
        $query .= " AND entreprise_ville='".addslashes($ville)."'";
        $query .= " LIMIT  ".$_iDebutListe.",".$_iParPage."";
     
        $jdb = jDb::getDbWidget();
        $tResult['entreprise']  =  $jdb->fetchAll($query);
        $count =  $jdb->fetchFirst('SELECT FOUND_ROWS() as nbEnreg');
        $tResult['nbRecords'] = $count->nbEnreg;

        return $tResult;
    }


        /**
     * Récuperation des entreprises par type et par région
     * @param array $entreprise
     */
    public static function getVille($dept,$type){

        $query  = " SELECT  DISTINCT entreprise_ville,entreprise_departement,entreprise_ouverture, entreprise_piece, entreprise_type_id,departement_num,departement_id FROM ao_entreprise";
        $query .= " INNER JOIN ao_departement on departement_id = entreprise_departement";
        $query .= " WHERE  entreprise_type_id =" .$type;
        $query .= " AND entreprise_departement=".$dept;

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($query);

        return $tResult;
    }

     /**
     * Récuperation des marques mises en avant des entreprises par département 
     * @param array $entreprise
     */
    public static function getMarqueMiseEnAvant($dept){

        $query  = " SELECT Occas_Marque, marque_libelle,marque_id,Occas_Departement  FROM ao_voiture_occasion"; 
        $query .= " INNER JOIN ao_marque ON ao_marque.marque_id = ao_voiture_occasion.Occas_Marque"; 
        $query .= " WHERE ao_marque.marque_enAvant =1  AND Occas_Departement IN (".$dept.")";
        $query .= " GROUP BY  Occas_Marque";

        $jdb     = jDb::getDbWidget();
        $tResult =  $jdb->fetchAll($query);
        return $tResult;


    }


    /**
     * Générer un numéro de téléphone surtaxé depuis le numéro de téléphone de la casse 
     * @param array $entreprise
     */
    public static function numSurtaxe($entreprise){
        $return = array();
        foreach ($entreprise as $item) {
            $item->entreprise_tel = self::getNumSurtaxe($item);
            $return[] = $item;
        }
        return $return;


    }

    /**
     * Générer un numéro de téléphone surtaxé depuis le numéro de téléphone de la casse 
     * @param array $entreprise
     */
    public static function getNumSurtaxe($entreprise){
        //return $entreprise->entreprise_tel; 
        $url="http://webpayment.absolu-telecom.lu/index.php?type_sortie=3&idd=4276&ids=1930&idv=".$_SERVER['REMOTE_ADDR']."&numero_service=".urlencode(str_replace(" ", "",  $entreprise->entreprise_tel))."&nom_service=".urlencode($entreprise->entreprise_name);

        $num = wordwrap(file_get_contents($url), 2, ' ', true) ;
        $tabNum = explode(";", $num);
        return (isset($tabNum[0]) && !$tabNum[0]) ? "" : $num;
    }

}